#ifndef __MOTOR_PROTOCOL_H
#define __MOTOR_PROTOCOL_H


#include "main.h"
#ifdef __cplusplus
extern "C" {
#endif






// 协议定义常量
#define PROTOCOL_HEADER1      0xaa
#define PROTOCOL_HEADER2      0x55
#define CMD_READ_REG          0x32
#define CMD_WRITE_REG         0x31
#define CMD_READ_MULTI_REG    0x10
#define CMD_WRITE_MULTI_REG   0x11
#define CMD_READ_STATUS       0x30

#define BROADCAST_ID 0xFF



// 系统配置命令
#define MOTOR_CMD_ID                 0x06  // 设备ID配置
#define MOTOR_CMD_BAUDRATE           0x07  // 串口波特率设置
#define MOTOR_CMD_CLEAR_ERROR        0x08  // 清除错误状态
#define MOTOR_CMD_EMERGENCY_STOP     0x09  // 紧急停止
#define MOTOR_CMD_PAUSE              0x0A  // 暂停操作
#define MOTOR_CMD_RESTORE            0x0B  // 恢复操作
#define MOTOR_CMD_SAVE_CONFIG        0x0C  // 保存参数
#define MOTOR_CMD_ACCESS_CODE        0x0D  // 授权码

// 保护参数
#define MOTOR_CMD_TEMP_MAX           0x0E  // 温度保护阈值
#define MOTOR_CMD_TEMP_MIN           0x0F  // 最低工作温度
#define MOTOR_CMD_CURRENT_MAX        0x10  // 电流保护阈值
#define MOTOR_CMD_CURRENT_UPPER      0x11  // 电流上限
#define MOTOR_CMD_CURRENT_LOWER      0x12  // 电流下限
#define MOTOR_CMD_POS_UPPER_LIMIT    0x13  // 位置上限
#define MOTOR_CMD_POS_LOWER_LIMIT    0x14  // 位置下限
#define MOTOR_CMD_STATE_WORD         0x16  // 驱动器状态字
#define MOTOR_CMD_LIMIT_UPPER        0x17  // 上限位开关状态 
#define MOTOR_CMD_LIMIT_LOWER        0x18  // 下限位开关状态
#define MOTOR_CMD_LIMIT_ENABLE       0x19  // 限位开关使能

// 运动控制参数
#define MOTOR_CMD_ACCEL              0x1A  // 加速度设置
#define MOTOR_CMD_CTRL_MODE          0x20  // 控制模式(位置/速度等)
#define MOTOR_CMD_CURRENT_SET        0x21  // 电流设定值
#define MOTOR_CMD_SPEED_SET          0x23  // 速度设定值
#define MOTOR_CMD_POSITION_SET       0x24  // 位置设定值


// 状态反馈命令
#define MOTOR_CMD_POSITION_ACT       0x26  // 实际位置
#define MOTOR_CMD_CURRENT_ACT        0x27  // 实际电流
#define MOTOR_CMD_SPEED_ACT          0x28  // 实际速度
#define MOTOR_CMD_ERROR_CODE         0x2A  // 错误代码
#define MOTOR_CMD_TEMP_ACT           0x2B  // 电机温度
#define MOTOR_CMD_VOLTAGE            0x2C  // 电源电压
#define MOTOR_CMD_SPEED_REF          0x2E  // 速度环参考值
#define MOTOR_CMD_SPEED_ADD          0x2F  // 速度附加值
#define MOTOR_CMD_PROFILE_POS        0x30  // 曲线规划位置
#define MOTOR_CMD_PROFILE_SPD        0x31  // 曲线规划速度
#define MOTOR_CMD_POS_ADC_RAW        0x32  // 位置传感器原始值
#define MOTOR_CMD_POS_ADC_FILTERED   0x33  // 位置传感器滤波值


// 添加到usr_protocol.h文件
#define MAX_FRAME_SIZE 24  // 根据你的命令帧最大长度调整

typedef struct {
    uint8_t motor_group;         // 0=UART1, 1=UART2
    uint8_t frame_data[MAX_FRAME_SIZE];
    uint16_t frame_length;
} UartFrameCommand_t;

typedef enum {
    SLAVE_WAITING_RESPONSE,
    SLAVE_ONLINE=1,
    SLAVE_OFFLINE = 2,
} SlaveStatus;




uint16_t process_protocol_data(uint8_t uart_channel, const uint8_t* data, uint16_t length);
uint16_t build_command_frame(uint8_t* buffer, uint8_t id,uint8_t Cmd, uint16_t Index, const uint8_t* pdata, uint8_t DataLen);

#ifdef __cplusplus
}
#endif

#endif// __MAIN_H